package step1_homework3;

/*   使用集合实现斗地主游戏的部分功能，要求如下：
    （1）首先准备 54 张扑克牌并打乱顺序。
    （2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。
    （3）查看三个玩家手中的扑克牌和底牌。
    （4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：
     手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
*/

import java.util.*;

public class Test05 {

    // 创建牌盒将来存储牌面的
    private static HashMap<Integer, String> pokerBox = new HashMap<>();
    private static List<Integer> order = new ArrayList();
    private static String[] value = {"大王", "小王", "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
    private static String[] type = {"♥", "♠", "♣", "♦"};
    //创建三个玩家集合和一个底牌集合
    private static ArrayList<Integer> player1 = new ArrayList<>();
    private static ArrayList<Integer> player2 = new ArrayList<>();
    private static ArrayList<Integer> player3 = new ArrayList<>();
    private static ArrayList<Integer> dipai = new ArrayList<>();



    /**
     * 1: 准备牌操作
     */

    public static void prepare() {
        int index = 1;                                     //index用于标记牌面大小
        for (int i = 0; i < value.length; i++) {
            for (int j = 0; j < type.length; j++) {        //分别制作一整副牌
                if (i < 2) {
                    pokerBox.put(index, value[i]);         //order集合用于存放按大小排序的index索引值从1~54；
                    order.add(index);
                    index++;
                    break;
                } else {
                    pokerBox.put(index, type[j] + value[i]);
                    order.add(index);
                    index++;

                }
            }

        }

    }
    //2.打乱牌
    public static void sf() {

        Collections.shuffle(order);
    }
    /**
     * 3.发牌
     * 遍历牌盒 必须知道索引
     */
    public static void deal() {
        int card_id;
        for (int i = 0; i < order.size(); i++) {
            //获取 牌面
            card_id = order.get(i);
            //留出三张底牌 存到 底牌集合中
            if (i >= 51) {//存到底牌集合中
                dipai.add(card_id);
            } else {
                //玩家1   %3  ==0
                if (i % 3 == 0) {
                    player1.add(card_id);
                } else if (i % 3 == 1) {//玩家2
                    player2.add(card_id);
                } else {//玩家3
                    player3.add(card_id);
                }
            }
        }
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(dipai);

    }

    /**
     //4.用于打印牌面
     */

    private static void printCards(List<Integer> l) {
        for (Integer integer : l) {
            System.out.print(pokerBox.get(integer) + " ");      //根据index索引值找到对应的牌面
        }
    }
    /**
     //5.展示牌
     */
    public static void show() {

        System.out.println("\nPlayer1：");
        printCards(player1);
        System.out.println("\nPlayer2：");
        printCards(player2);
        System.out.println("\nPlayer3：");
        printCards(player3);
        System.out.println("\n底牌：");
        printCards(dipai);
    }
    public static void main(String[] args) {

        prepare();//准备一副牌
        sf();//洗牌
        deal();//发牌
        show();//展示牌

    }
}


